const fs = require("fs");
const path = require('path'); //系统路径模块

if(process.argv[2] === undefined){
  return console.log('请输入项目名!!');
}



// 文件列表
const pkgFilePath={
  branch: path.join(__dirname, process.argv[2]+'/package.json'),
  master: path.join(__dirname, 'package.json')
};

// 读取文件内容对象
const fileObj={};

// 读取文件
Object.keys(pkgFilePath).forEach((key,index)=>{
  fileObj[key]=JSON.parse(fs.readFileSync(pkgFilePath[key],'utf-8'));
})

// 需要获取的配置项
const fetchKey=['dependencies','devDependencies','scripts'];

// 循环遍历获取配置项内容
fetchKey.forEach(function(configKey){

  // 合并分支的package.json的生产依赖,开发依赖,命令集合到主干的package.json
  Object.keys(fileObj['branch'][configKey]).forEach(function(key){

    
    fileObj['master'][configKey][key]=fileObj['branch'][configKey][key];

    if(configKey == 'scripts'){

      let configVal=fileObj['branch'][configKey][key];
      let configValArr=configVal.split(' ');
     
      //修改脚本命令中引用webpack配置文件的路径
      if(configValArr.length > 1){
        // 指定了配置文件
        if(configVal.indexOf('--config') !== -1){
          let pos=configValArr.indexOf('--config')+1;
          configValArr[pos]=process.argv[2]+'/'+configValArr[pos];
          
        }// 显示指定默认配置文件
        else if(configVal.indexOf('webpack.config.js') !== -1){
          configValArr.every(function(item, index,configValArr) {  
              if(item.indexOf('webpack.config.js') !== -1) {  
                configValAr[index+1] = process.argv[2]+'/'+configValArr[index];     
                  return false;  
              }    
              return true;  
          });  
        }// 隐式指定配置文件
        else if(configVal.indexOf('webpack') !== -1){
          configValArr.push('--config '+process.argv[2]+'/webpack.config.js');
        }

        fileObj['master'][configKey][key]=configValArr.join(' ');
      }

    }

  });

})


fileObj['master'].log={
  form:pkgFilePath['branch'],
  gmtCreated:new Date().toLocaleString().replace(/\//g,'-').replace(/[\u4e00-\u9fa5]/g,''),
};


fs.writeFile(pkgFilePath['master'],JSON.stringify(fileObj['master'],null,4),function(err){
  if(err) throw err;
  console.log('完成package文件更新');
});
